#include "bsp_exti.h"
#include "bsp_gpio.h"
#include "bsp_int.h"
#include "bsp_delay.h"
#include "bsp_beep.h"

/* 初始化外部中断，也就是GPIO1-IO18 */
void exti_init()
{
    gpio_pin_config_t key_config;

    /* 1、初始化IO复用, 复用为GPIO1_IO18 */
    IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);

    IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0xF080);

    /* 3、初始化GPIO */
    key_config.intteruptMode = KGPIO_IntFallingLevel;
    key_config.direction = kGPIO_DigitalInput;
    gpio_init(GPIO1, 18, &key_config);
    GIC_EnableIRQ(GPIO1_Combined_16_31_IRQn);
    system_register_irqhandler(GPIO1_Combined_16_31_IRQn, gpio1_io18_irqhandler, NULL);

    gpio_enableint(GPIO1, 18);

    
}

/* 真正的中断处理函数 */
void gpio1_io18_irqhandler(unsigned int gicciar, void *param)
{
    static unsigned char status = 0;
    delay_ms(10);/* 按键消抖，实际开发中，禁止这样使用 */
    if(gpio_pinread(GPIO1, 18) == 0)
    {
        status = !status;
        beep_switch(status);
    }
    /* 清除中断标志位 */
    gpio_clearintflags(GPIO1, 18);
}
